﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;

namespace TwojeFinanse
{
    class Kredyty
    {
        public string podsumowanie;

        public double oprocentowanie;
        public int liczbaRat;
        public double kwota;

        public double czescKapitalowa;
        public double czescOdsetkowa;
        public double splaconeOdsetki;
        public double splaconyKredyt;

        public Kredyty(double _oprocentowanie, int _liczbaRat, double _kwota)
        {
            oprocentowanie = _oprocentowanie;
            liczbaRat = _liczbaRat;
            kwota = _kwota;
        }

        double IPmt(double rate, int paymentPeriod, int numberOfPayments, double amount)
        {
            if (paymentPeriod < 1 || paymentPeriod > numberOfPayments) { return 0; }
            if (rate == 0) { return 0; }

            double payment = Pmt(rate, numberOfPayments, amount);
            double futureValue = FV(rate, (paymentPeriod - 1), payment, amount);
            return (futureValue * rate);
        }

        double Pmt(double rate, int numberOfPayments, double amount)
        {
            double temp = Math.Pow((rate + 1), numberOfPayments);

            return ((-amount * temp) / ((temp - 1)) * rate);
        }

        double FV(double rate, int numberOfPayments, double payment, double amount)
        {
            double temp = Math.Pow(rate + 1, numberOfPayments);

            return ((-amount) * temp) - ((payment / rate) * (temp - 1));
        }

        double myRound(double r)
        {
            return (r - (((r * 100) - (int)(r * 100)) / 100));
        }

        public void licz(bool ratyRowne)
        {
            liczbaRat *= 12;
            oprocentowanie /= 100;
            oprocentowanie /= 12;

            if (ratyRowne)
            {
                for (int period = 1; period <= liczbaRat; period++)
                {
                    double rata = Pmt(oprocentowanie, liczbaRat, -kwota);
                    double kredyt = FV(oprocentowanie, (period - 1), rata, -kwota);
                    czescOdsetkowa = (kredyt * oprocentowanie);
                    czescKapitalowa = rata - czescOdsetkowa;
                    splaconyKredyt += czescKapitalowa;
                    splaconeOdsetki += czescOdsetkowa;

                    //podsumowanie += String.Format("{0}\t{1:.00}\t{2:.00}\t{3:.00}\t{4:.00}\t\t{5:.00}\t{6:.00}\t{7:.00}\n", period, rata, czescKapitalowa, czescOdsetkowa, splaconyKredyt, splaconeOdsetki, (splaconyKredyt + splaconeOdsetki), myRound(kwota - splaconyKredyt));                    
                    podsumowanie += String.Format("{0}\t{1:.00}\t\t{2:.00}\t\t{3:.00}\t\t{4:.00}\t", period, rata, czescKapitalowa, czescOdsetkowa, splaconyKredyt);

                    if (splaconyKredyt <= 99999.99)
                    {
                        podsumowanie += "\t";
                    }

                    podsumowanie += String.Format("{0:.00}\t", splaconeOdsetki);
                    if (splaconeOdsetki <= 99999.99)
                    {
                        podsumowanie += "\t";
                    }
                    podsumowanie += String.Format("{0:.00}\t", (splaconyKredyt + splaconeOdsetki));
                    if ((splaconyKredyt + splaconeOdsetki) <= 99999.99)
                    {
                        podsumowanie += "\t";
                    }
                    podsumowanie += String.Format("{0:.00}\n", myRound(kwota - splaconyKredyt));
                }
            }
            else
            {
                double czescKapitalowa = kwota / liczbaRat;

                for (int period = 0; period < liczbaRat; period++)
                {
                    double czescOdsetkowa = (kwota - period * czescKapitalowa) * oprocentowanie;

                    double rata = czescKapitalowa + czescOdsetkowa;

                    czescKapitalowa = rata - czescOdsetkowa;
                    splaconyKredyt += czescKapitalowa;
                    splaconeOdsetki += czescOdsetkowa;

                    podsumowanie += String.Format("{0}\t{1:.00}\t\t{2:.00}\t\t{3:.00}\t\t{4:.00}\t", period, rata, czescKapitalowa, czescOdsetkowa, splaconyKredyt);

                    if (splaconyKredyt <= 99999.99)
                    {
                        podsumowanie += "\t";
                    }

                    podsumowanie += String.Format("{0:.00}\t", splaconeOdsetki);
                    if (splaconeOdsetki <= 99999.99)
                    {
                        podsumowanie += "\t";
                    }
                    podsumowanie += String.Format("{0:.00}\t", (splaconyKredyt + splaconeOdsetki));
                    if ((splaconyKredyt + splaconeOdsetki) <= 99999.99)
                    {
                        podsumowanie += "\t";
                    }
                    podsumowanie += String.Format("{0:.00}\n", myRound(kwota - splaconyKredyt));
                }

            }       
        }
    }
}
